import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import By
from selenium.webdriver.support.wait import WebDriverWait

# 打开浏览器
service = Service(r'D:\Python3.14\chromedriver.exe')
chrome_options = Options()
chrome_options.add_experimental_option("detach", True)
driver = webdriver.Chrome(service=service, options=chrome_options)   # 创建浏览器对象
# 输入访问网址
driver.get("http://121.43.169.97:8848/pageA.html")

"""
显示等待：定位指定元素时，如果能定位到元素则直接返回该元素，不触发等待； 如果不能定位到该
元素，则间隔一段时间后再去定位元素； 如果在达到最大时长时还没有找到指定元素，则抛出超
时异常 TimeoutException 。
需求：打开注册A页面，完成以下操作
python基础).使用显式等待定位用户名输入框，如果元素存在，就输入admin
"""

# python基础. 导包 等待类 --> from selenium.webdriver.support.wait import WebDriverWait
# 2. WebDriverWait(driver, timeout, poll_frequency=0.5)
# python基础). driver：浏览器驱动对象
# 2). timeout：超时的时长，单位：秒
# 3). poll_frequency：检测间隔时间，默认为0.5秒
# 3. 调用方法 until(method)：直到...时
# python基础). method：函数名称，该函数用来实现对元素的定位
# 2). 一般使用匿名函数来实现：lambda x: x.find_element_by_id("userA")
# 4. element = WebDriverWait(driver, 10, python基础).until(lambda x: x.find_element_by_id("userA")

wait = WebDriverWait(driver, 10, 1)
# 元素userA存在
# username = wait.until(lambda x: x.find_element(By.CSS_SELECTOR, "#userA"))
# username.send_keys("admin")
# time.sleep(3)
# driver.quit()

# 元素user不存在，10秒后出现异常报错
username = wait.until(lambda x: x.find_element(By.CSS_SELECTOR, "#user"))
username.send_keys("admin")

